package entity

import (
	"encoding/json"
	"strings"
)

type Record struct {
	File  string `json:"file"`
	User  User   `json:"user"`
	Start bool   `json:"start"`
	Done  bool   `json:"done"`
}

func (r Record) String() string {
	marshal, _ := json.Marshal(r)
	return string(marshal)
}

type User struct {
	ID            string   `json:"id"`                // UUID
	Timestamp     string   `json:"timestamp"`         // ISO格式时间戳
	UserID        int      `json:"user_id"`           // 用户ID
	UserName      string   `json:"user_name"`         // 用户名
	Email         string   `json:"email"`             // 邮箱
	Phone         string   `json:"phone"`             // 电话
	Age           int      `json:"age"`               // 年龄
	Gender        string   `json:"gender"`            // 性别: "男" 或 "女"
	City          string   `json:"city"`              // 城市
	Province      string   `json:"province"`          // 省份
	Address       string   `json:"address"`           // 地址
	IPAddress     string   `json:"ip_address"`        // IP地址
	OrderID       string   `json:"order_id"`          // 订单ID
	ProductID     string   `json:"product_id"`        // 产品ID
	ProductName   string   `json:"product_name"`      // 产品名称
	Category      string   `json:"category"`          // 分类
	Price         float64  `json:"price"`             // 价格
	Quantity      int      `json:"quantity"`          // 数量
	Discount      float64  `json:"discount"`          // 折扣
	PaymentMethod string   `json:"payment_method"`    // 支付方式
	Status        string   `json:"status"`            // 订单状态
	Rating        int      `json:"rating"`            // 评分 (1-5)
	Comment       *string  `json:"comment,omitempty"` // 评论 (可能为null)
	Tags          []string `json:"tags"`              // 标签数组
	IsMember      bool     `json:"is_member"`         // 是否会员
	Points        int      `json:"points"`            // 积分
	CreatedAt     string   `json:"created_at"`        // 创建时间
}

type UserCsv struct {
	ID            string  `json:"id"`             // UUID
	Timestamp     string  `json:"timestamp"`      // ISO格式时间戳
	UserID        int     `json:"user_id"`        // 用户ID
	UserName      string  `json:"user_name"`      // 用户名
	Email         string  `json:"email"`          // 邮箱
	Phone         string  `json:"phone"`          // 电话
	Age           int     `json:"age"`            // 年龄
	Gender        string  `json:"gender"`         // 性别: "男" 或 "女"
	City          string  `json:"city"`           // 城市
	Province      string  `json:"province"`       // 省份
	Address       string  `json:"address"`        // 地址
	IPAddress     string  `json:"ip_address"`     // IP地址
	OrderID       string  `json:"order_id"`       // 订单ID
	ProductID     string  `json:"product_id"`     // 产品ID
	ProductName   string  `json:"product_name"`   // 产品名称
	Category      string  `json:"category"`       // 分类
	Price         float64 `json:"price"`          // 价格
	Quantity      int     `json:"quantity"`       // 数量
	Discount      float64 `json:"discount"`       // 折扣
	PaymentMethod string  `json:"payment_method"` // 支付方式
	Status        string  `json:"status"`         // 订单状态
	Rating        int     `json:"rating"`         // 评分 (1-5)
	Comment       string  `json:"comment"`        // 评论 (可能为null)
	Tags          string  `json:"tags"`           // 标签数组
	IsMember      bool    `json:"is_member"`      // 是否会员
	Points        int     `json:"points"`         // 积分
	CreatedAt     string  `json:"created_at"`     // 创建时间
}

func (u User) ToCsv() UserCsv {
	comment := ""
	if u.Comment != nil {
		comment = *u.Comment
	}

	tags := ""
	if len(u.Tags) > 0 {
		tags = strings.Join(u.Tags, ",")
	}

	return UserCsv{
		ID:            u.ID,
		Timestamp:     u.Timestamp,
		UserID:        u.UserID,
		UserName:      u.UserName,
		Email:         u.Email,
		Phone:         u.Phone,
		Age:           u.Age,
		Gender:        u.Gender,
		City:          u.City,
		Province:      u.Province,
		Address:       u.Address,
		IPAddress:     u.IPAddress,
		OrderID:       u.OrderID,
		ProductID:     u.ProductID,
		ProductName:   u.ProductName,
		Category:      u.Category,
		Price:         u.Price,
		Quantity:      u.Quantity,
		Discount:      u.Discount,
		PaymentMethod: u.PaymentMethod,
		Status:        u.Status,
		Rating:        u.Rating,
		Comment:       comment,
		Tags:          tags,
		IsMember:      u.IsMember,
		Points:        u.Points,
		CreatedAt:     u.CreatedAt,
	}
}
